package com.rj.data.task.lineprocessor;

import com.google.common.io.LineProcessor;
import com.rj.data.entity.CompanyWideInfo;
import com.rj.data.sink.Sink;
import io.searchbox.action.BulkableAction;
import io.searchbox.core.Index;
import lombok.Builder;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
 * 企业基本信息导入es的行处理器
 */
@Builder
public class ComInfotoEsLineProcessor implements LineProcessor<List<BulkableAction>> {
    Sink<List<BulkableAction>> sink = null;
    List<BulkableAction> actionList = new ArrayList<>();
    String indexName;
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

    //    ID,PROVINCE,COMPANY_NAME,
//    COMPANY_AIDCODE,LEGAL_PERSON_ID,LEGAL_PERSON_NAME,LEGAL_PERSON_TYPE,REG_NUMBER,COMPANY_CLASS_CODE,
//    COMPANY_CLASS_NAME,REG_LOCATION,ESTIBLISH_TIME,FROM_TIME,TO_TIME,REG_INSTITUTE,APPROVED_TIME,
//    REG_STATUS,REG_CAPITAL_NUM,REG_CAPITAL_TYPE,ORG_NUMBER,LIST_CODE,OWNERSHIP_STAKE,USC_CODE,
//    FORMER_NAME,COMPANY_ENNAME,NEW_COM_ID,DESC02,DESC03,REPLACE(REPLACE(BUSINESS_SCOPE,CHAR(10),''),CHAR(13),'')
    @Override
    public boolean processLine(String line) {

        try {
            line = line.replaceAll("\\\\N", "");
            String larr[] = line.split("|\\+|");
            String cname = larr[2];

            if (larr.length > 28 && StringUtils.isNotBlank(cname) && !"na".equalsIgnoreCase(cname)) {
                String reg_status = larr[16];
                if (StringUtils.isBlank(reg_status) || reg_status.contains("注销") || reg_status.contains("吊销") ||
                        reg_status.contains("清算") || reg_status.contains("停业")||reg_status.contains("迁出")) {
                    return true;
                }
                CompanyWideInfo entity = new CompanyWideInfo();
                entity.setId(Integer.parseInt(larr[0]));
                cname = StringUtils.isBlank(cname) ? null : cname.replaceAll("\\\"", "");
                entity.setCompany_name(cname);

                //企业id
                Integer id = Integer.parseInt(larr[0]);
                entity.setId(id);
                //归属省份的首字母大写,默认OTHER
                String province = larr[1];
                province = StringUtils.isBlank(province) ? null : province.replaceAll("\\\"", "");
                entity.setProvince(province);

                //公司名称拼音助记码
                String company_aidcode = larr[3];
                company_aidcode = StringUtils.isBlank(company_aidcode) ? null : company_aidcode.replaceAll("\\\"", "");
                entity.setCompany_aidcode(company_aidcode);
                //法人ID=PERSON_NAME.ID
                String legal_person_id = larr[4];
                legal_person_id = StringUtils.isBlank(legal_person_id) ? null : legal_person_id.replaceAll("\\\"", "");
                entity.setLegal_person_id(legal_person_id);
                //法人姓名
                String legal_person_name = larr[5];
                legal_person_name = StringUtils.isBlank(legal_person_name) ? null : legal_person_name.replaceAll("\\\"", "");
                entity.setLegal_person_name(legal_person_name);
                //法人类型，1 人 2 公司 3 团体4 社会组织5 政府部门
                String legal_person_type = larr[6];
                legal_person_type = StringUtils.isBlank(legal_person_type) ? null : legal_person_type.replaceAll("\\\"", "");
                entity.setLegal_person_type(legal_person_type);
                //注册号
                String reg_number = larr[7];
                reg_number = StringUtils.isBlank(reg_number) ? null : reg_number.replaceAll("\\\"", "");
                entity.setReg_number(reg_number);
                //公司分类编码
                String company_class_code = larr[8];
                company_class_code = StringUtils.isBlank(company_class_code) ? null : company_class_code.replaceAll("\\\"", "");
                entity.setCompany_class_code(company_class_code);
                //公司分类名称
                String company_class_name = larr[9];
                company_class_name = StringUtils.isBlank(company_class_name) ? null : company_class_name.replaceAll("\\\"", "");
                entity.setCompany_class_name(company_class_name);
                //注册地址
                String reg_location = larr[10];
                reg_location = StringUtils.isBlank(reg_location) ? null : reg_location.replaceAll("\\\"", "");
                entity.setReg_location(reg_location);
                //成立日期
//                System.out.println("date======>" + larr[11]);
                String estiblish_time = (StringUtils.isBlank(larr[11]) || larr[11].length() < 10) ? null : larr[11].substring(0, 10);
                entity.setEstiblish_time(estiblish_time);
                //营业期限开始日期
                String from_time = (StringUtils.isBlank(larr[12]) || larr[12].length() < 10) ? null : larr[12].substring(0, 10);
                entity.setFrom_time(from_time);
                //营业期限终止日期
                String to_time = (StringUtils.isBlank(larr[13]) || larr[13].length() < 10) ? null : larr[13].substring(0, 10);
                entity.setTo_time(to_time);

                //登记机关
                String reg_institute = larr[14];
                reg_institute = StringUtils.isBlank(reg_institute) ? null : reg_institute.replaceAll("\\\"", "");
                entity.setReg_institute(reg_institute);
                //核准日期
                String approved_time = (StringUtils.isBlank(larr[15]) || larr[15].length() < 10) ? null : larr[15].substring(0, 10);
                entity.setApproved_time(approved_time);
                //企业状态
//                String reg_status = larr[16];
                reg_status = StringUtils.isBlank(reg_status) ? null : reg_status.replaceAll("\\\"", "");
                entity.setReg_status(reg_status);
                //注册资金数值：万元
                float reg_capital_num = StringUtils.isBlank(larr[17]) ? 0f : Float.valueOf(larr[18]);
                entity.setReg_capital_num(reg_capital_num);
                //注册资金币种：默认人民币
                String reg_capital_type = larr[18];
                reg_capital_type = StringUtils.isBlank(reg_capital_type) ? null : reg_capital_type.replaceAll("\\\"", "");
                entity.setReg_capital_type(reg_capital_type);
                //组织机构代码
                String org_number = larr[19];
                org_number = StringUtils.isBlank(org_number) ? null : org_number.replaceAll("\\\"", "");
                entity.setOrg_number(org_number);

                //上市代码
                String list_code = larr[20];
                list_code = StringUtils.isBlank(list_code) ? null : list_code.replaceAll("\\\"", "");
                entity.setList_code(list_code);
                //母公司控股比例
                Float ownership_stake = StringUtils.isBlank(larr[21]) ? null : Float.valueOf(larr[21]);
                entity.setOwnership_stake(ownership_stake);
                //统一社会信用代码（Unified Social Credit Code）
                String usc_code = larr[22];
                usc_code = StringUtils.isBlank(usc_code) ? null : usc_code.replaceAll("\\\"", "");
                entity.setUsc_code(usc_code);
                //该公司现用公司名所对应公司（former name）曾用名
                String former_name = larr[23];
                former_name = StringUtils.isBlank(former_name) ? null : former_name.replaceAll("\\\"", "");
                entity.setFormer_name(former_name);
                //公司英文名称
                String company_enname = larr[24];
                company_enname = StringUtils.isBlank(company_enname) ? null : company_enname.replaceAll("\\\"", "");
                entity.setCompany_enname(company_enname);
                //对应的新公司ID
                String new_com_id = larr[25];
                new_com_id = StringUtils.isBlank(new_com_id) ? null : new_com_id.replaceAll("\\\"", "");
                entity.setNew_com_id(new_com_id);
                //新公司ID
                String desc02 = larr[26];
                desc02 = StringUtils.isBlank(desc02) ? null : desc02.replaceAll("\\\"", "");
                entity.setDesc02(desc02);
                //行政区划省市
                String desc03 = StringUtils.isBlank(larr[27]) ? null : larr[27];
                entity.setDesc03(desc03);
                //经营范围
                String business_scope = larr[28];
                business_scope = StringUtils.isBlank(business_scope) ? null : business_scope.replaceAll("\\\"", "");
                entity.setBusiness_scope(business_scope);
                entity.setVerDate(simpleDateFormat.format(new Date()));

                actionList.add(new Index.Builder(entity).index(indexName).build());
            }

            if (actionList.size() >= 10000) {
                try {
                    sink.writeLines(actionList, true, true, null);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                actionList.clear();
            }
        } catch (Exception e) {
//            System.out.println(line);
//            e.printStackTrace();
            try {
                FileUtils.writeLines(new File("/data/errorCom.txt"), "UTF-8", Arrays.asList(line), true);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

        return true;
    }

    @Override
    public List<BulkableAction> getResult() {
        return actionList;
    }
}
